// 读取文件
// 语法
// 以下为异步模式下读取文件的语法格式：
//
// fs.read(fd, buffer, offset, length, position, callback)
// 该方法使用了文件描述符来读取文件。
//
// 参数
// 参数使用说明如下：
//
// fd - 通过 fs.open() 方法返回的文件描述符。
//
// buffer - 数据写入的缓冲区。
//
// offset - 缓冲区写入的写入偏移量。
//
// length - 要从文件中读取的字节数。
//
// position - 文件读取的起始位置，如果 position 的值为 null，则会从当前文件指针的位置读取。
//
// callback - 回调函数，有三个参数err, bytesRead, buffer，
// err 为错误信息， bytesRead 表示读取的字节数，buffer 为缓冲区对象。


// r	以读取模式打开文件。如果文件不存在抛出异常。
// r+	以读写模式打开文件。如果文件不存在抛出异常。
// rs	以同步的方式读取文件。
// rs+	以同步的方式读取和写入文件。
// w	以写入模式打开文件，如果文件不存在则创建。
// wx	类似 'w'，但是如果文件路径存在，则文件写入失败。
// w+	以读写模式打开文件，如果文件不存在则创建。
// wx+	类似 'w+'， 但是如果文件路径存在，则文件读写失败。
// a	以追加模式打开文件，如果文件不存在则创建。
// ax	类似 'a'， 但是如果文件路径存在，则文件追加失败。
// a+	以读取追加模式打开文件，如果文件不存在则创建。
// ax+	类似 'a+'， 但是如果文件路径存在，则文件读取追加失败。




var fs = require("fs");
var buf = new Buffer.alloc(1024);

console.log("准备打开已存在的文件！");
//异步只是说边打开边在函数里处理
fs.open('input.txt', 'r+', function(err, fd) {
    if (err) {
        return console.error(err);
    }
    console.log("文件打开成功！");
    console.log("准备读取文件：");
    fs.read(fd, buf, 0, buf.length, 0, function(err, bytes){
        if (err){
            console.log(err);
        }
        console.log(bytes + "  字节被读取");

        // 仅输出读取的字节
        if(bytes > 0){
            console.log(buf.slice(0, bytes).toString());
        }
    });
});

/*


准备打开已存在的文件！
文件打开成功！
准备读取文件：
257  字节被读取
-------------------------------------------------------------------------
    npm config set registry https://registry.npm.taobao.org
    npm config set disturl https://npm.taobao.org/dist
    -------------------------------------------------------------------------

        Process finished with exit code 0

*/

